iT邦幫忙

2024 iThome 鐵人賽

DAY 13
2

概述

容器中的檔案在磁碟上是臨時存放的,這會對運行重要應用的容器帶來一些問題。當容器崩潰或停止時,所有未保存的狀態和數據都將丟失,因此在容器生命週期內創建或修改的所有檔案都會消失。此外,當多個容器在同一個 Pod 中運行並需要共享檔案時,跨容器設置和訪問共享檔案系統也具有一定的挑戰性。

Kubernetes 的卷(Volume)概念能夠有效解決這些問題。

https://ithelp.ithome.com.tw/upload/images/20240927/20168212hUTrTAUp1U.png

Volume 的使用方式

在 Kubernetes 中,Volume 是以 Pod 為範圍進行定義的。這意味著同一個 Pod 中的多個容器可以同時訪問定義的 Volume。以下是使用 Volume 的一般步驟:

  1. 定義 Volume:在 Pod 的規範中,宣告需要使用的 Volume 類型和相關設定。
  2. 掛載 Volume:在容器的設定中,指定要將 Volume 掛載到容器內的哪個路徑。
  3. 訪問資料:容器啟動後,可以在掛載的路徑下讀取或寫入資料。

透過這種方式,Volume 成為容器與外部存儲之間的橋樑,使資料的管理更加靈活和可靠。

Volume 的類型

在之前的章節中,我們將 Volume 粗略的分為三種類型,但根據 Kubernetes 官方的定義中,根據用途和特性,Volume 類型可以分為臨時存儲持久化存儲,以及配置管理和機密數據存儲三大類別。

臨時存儲 (Ephemeral Storage)

臨時存儲是指存儲在 Pod 生命週期內有效,但在 Pod 被刪除或重新調度時資料會消失的存儲類型。適合用於臨時數據或緩存。

  • emptyDir:當 Pod 被分配到節點時,會創建一個 emptyDir 卷。當 Pod 被刪除時,卷中的資料也會被刪除。適用於臨時緩存或需要在多個容器間共享的臨時資料。
  • configMap:雖然 configMap 主要用於配置管理,但當作為卷使用時,其數據在 Pod 生命週期內是臨時性的。Pod 刪除後,configMap 的卷也會消失。
  • secret:和 configMap 類似,secret 主要用於存儲機密數據,但作為卷使用時,數據在 Pod 生命週期內是臨時性的。

持久化存儲 (Persistent Storage)

持久化存儲是指在 Pod 被刪除或重新調度後,數據仍然保留的存儲類型。適合用於需要長期保存數據的應用場景。

  • persistentVolumeClaim (PVC):PVC 用於申請與 PersistentVolume (PV) 關聯的持久性存儲。數據在 Pod 重啟或重新調度後仍然保留。
  • hostPath:將 Kubernetes 節點上的文件或目錄掛載到容器中。資料會持久化到節點的文件系統中,但如果 Pod 被移到另一個節點,數據不會自動遷移。
  • NFS (Network File System):NFS 是一種允許多個 Pod 同時讀寫同一遠程伺服器上的資料夾的持久性存儲方式。

配置管理和機密數據存儲 (Configuration and Secrets Management)

這類存儲用於存放應用程式的配置檔案或機密數據,並將其注入到容器中。

  • configMap:用來存儲非機密的配置數據,並將其注入到 Pod 中。適合存放應用程式配置檔案或環境變數。
  • secret:用來存儲機密數據,如密碼、憑證等,並將其安全地注入到 Pod 中。數據在 Kubernetes 中會被加密。

這些 Volume 類型提供了靈活的存儲選項,以滿足不同應用程式的需求,無論是臨時存儲、持久化存儲,還是配置管理和機密數據存儲。

提醒:

configMapsecret 都屬於配置管理和機密數據存儲,但它們也可以作為臨時存儲的一部分使用,因為它們作為卷掛載時,數據在 Pod 被刪除後也會消失。這就是為什麼它們在不同類別中出現的原因。

Volume 的最佳實踐

為了在 Kubernetes 中有效地管理和使用 Volume,最好遵從一些最佳實踐:

  • 明確劃分資料與應用:將應用程式的執行與資料存儲分離,方便進行應用程式的更新和維護,而不影響資料。
  • 使用適當的存儲類型:根據應用需求選擇合適的 Volume 類型,避免過度或不足的資源配置。
  • 管理配置和機密資料:利用 configMapsecret 來管理應用程式的配置和機密資訊,確保系統的安全性和靈活性。
  • 監控和備份:對於持久化存儲,應該定期監控存儲的健康狀態,並制定備份策略以防止資料遺失。

小結

Kubernetes 的 Volume 概念為容器化應用程式的資料管理提供了強大的支持。透過合理地選擇和使用不同類型的 Volume,我們可以滿足應用程式對於資料持久性、共享性和安全性的需求,從而構建更可靠和可擴展的系統。

在接下來的幾天,我們將深入探討各種 Volume 類型的特性和使用場景,幫助你更好地應用它們於實際項目中。


參考


上一篇
學 Kubernetes 的第十二天 - Networking - Ingress
下一篇
學 Kubernetes 的第十四天 - Storage - emptyDir & hostPath
系列文
都什麼年代了,還在學 Kubernetes37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言